/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package com.unwiredgrain.modeling.sscm.util;

import com.unwiredgrain.modeling.sscm.BasicModule;
import com.unwiredgrain.modeling.sscm.Binding;
import com.unwiredgrain.modeling.sscm.Classifier;
import com.unwiredgrain.modeling.sscm.Socket;
import com.unwiredgrain.modeling.sscm.CompositeModule;
import com.unwiredgrain.modeling.sscm.Connector;
import com.unwiredgrain.modeling.sscm.CppTemplateInstantiation;
import com.unwiredgrain.modeling.sscm.CppTemplateParameter;
import com.unwiredgrain.modeling.sscm.Export;
import com.unwiredgrain.modeling.sscm.Interface;
import com.unwiredgrain.modeling.sscm.InterfaceTemplateInstantiation;
import com.unwiredgrain.modeling.sscm.Port;
import com.unwiredgrain.modeling.sscm.InnerConnector;
import com.unwiredgrain.modeling.sscm.IntTemplateArgument;
import com.unwiredgrain.modeling.sscm.IntTemplateInstantiation;
import com.unwiredgrain.modeling.sscm.IntTemplateParameter;
import com.unwiredgrain.modeling.sscm.IntegerValue;
import com.unwiredgrain.modeling.sscm.Module;
import com.unwiredgrain.modeling.sscm.NamedElement;
import com.unwiredgrain.modeling.sscm.NonTypeTemplateInstantiation;
import com.unwiredgrain.modeling.sscm.NonTypeTemplateParameter;
import com.unwiredgrain.modeling.sscm.Operation;
import com.unwiredgrain.modeling.sscm.OperationParameter;
import com.unwiredgrain.modeling.sscm.OuterConnector;
import com.unwiredgrain.modeling.sscm.Protocol;
import com.unwiredgrain.modeling.sscm.ProtocolTemplateInstantiation;
import com.unwiredgrain.modeling.sscm.SSCMPackage;
import com.unwiredgrain.modeling.sscm.Template;
import com.unwiredgrain.modeling.sscm.TemplateArgument;
import com.unwiredgrain.modeling.sscm.TemplateInstantiation;
import com.unwiredgrain.modeling.sscm.TemplateParameter;
import com.unwiredgrain.modeling.sscm.TypeTemplateArgument;
import com.unwiredgrain.modeling.sscm.TypeTemplateInstantiation;
import com.unwiredgrain.modeling.sscm.TypeTemplateParameter;
import com.unwiredgrain.modeling.sscm.TypedElement;
import com.unwiredgrain.modeling.sscm.Value;
import com.unwiredgrain.modeling.sscm.Wire;

import java.util.List;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * The <b>Switch</b> for the model's inheritance hierarchy.
 * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
 * to invoke the <code>caseXXX</code> method for each class of the model,
 * starting with the actual class of the object
 * and proceeding up the inheritance hierarchy
 * until a non-null result is returned,
 * which is the result of the switch.
 * <!-- end-user-doc -->
 * @see com.unwiredgrain.modeling.sscm.SSCMPackage
 * @generated
 */
public class SSCMSwitch<T> {
	/**
	 * The cached model package
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected static SSCMPackage modelPackage;

	/**
	 * Creates an instance of the switch.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public SSCMSwitch() {
		if (modelPackage == null) {
			modelPackage = SSCMPackage.eINSTANCE;
		}
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	public T doSwitch(EObject theEObject) {
		return doSwitch(theEObject.eClass(), theEObject);
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	protected T doSwitch(EClass theEClass, EObject theEObject) {
		if (theEClass.eContainer() == modelPackage) {
			return doSwitch(theEClass.getClassifierID(), theEObject);
		}
		else {
			List<EClass> eSuperTypes = theEClass.getESuperTypes();
			return
				eSuperTypes.isEmpty() ?
					defaultCase(theEObject) :
					doSwitch(eSuperTypes.get(0), theEObject);
		}
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	protected T doSwitch(int classifierID, EObject theEObject) {
		switch (classifierID) {
			case SSCMPackage.BASIC_MODULE: {
				BasicModule basicModule = (BasicModule)theEObject;
				T result = caseBasicModule(basicModule);
				if (result == null) result = caseModule(basicModule);
				if (result == null) result = caseNamedElement(basicModule);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.CLASSIFIER: {
				Classifier classifier = (Classifier)theEObject;
				T result = caseClassifier(classifier);
				if (result == null) result = caseTemplate(classifier);
				if (result == null) result = caseTypeTemplateArgument(classifier);
				if (result == null) result = caseNamedElement(classifier);
				if (result == null) result = caseTemplateArgument(classifier);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.SOCKET: {
				Socket socket = (Socket)theEObject;
				T result = caseSocket(socket);
				if (result == null) result = caseNamedElement(socket);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.COMPOSITE_MODULE: {
				CompositeModule compositeModule = (CompositeModule)theEObject;
				T result = caseCompositeModule(compositeModule);
				if (result == null) result = caseModule(compositeModule);
				if (result == null) result = caseNamedElement(compositeModule);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.CONNECTOR: {
				Connector connector = (Connector)theEObject;
				T result = caseConnector(connector);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.CPP_TEMPLATE_INSTANTIATION: {
				CppTemplateInstantiation cppTemplateInstantiation = (CppTemplateInstantiation)theEObject;
				T result = caseCppTemplateInstantiation(cppTemplateInstantiation);
				if (result == null) result = caseTemplateInstantiation(cppTemplateInstantiation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.CPP_TEMPLATE_PARAMETER: {
				CppTemplateParameter cppTemplateParameter = (CppTemplateParameter)theEObject;
				T result = caseCppTemplateParameter(cppTemplateParameter);
				if (result == null) result = caseTemplateParameter(cppTemplateParameter);
				if (result == null) result = caseNamedElement(cppTemplateParameter);
				if (result == null) result = caseTemplateArgument(cppTemplateParameter);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.INTERFACE: {
				Interface interface_ = (Interface)theEObject;
				T result = caseInterface(interface_);
				if (result == null) result = caseTemplate(interface_);
				if (result == null) result = caseNamedElement(interface_);
				if (result == null) result = caseTemplateArgument(interface_);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.INTERFACE_TEMPLATE_INSTANTIATION: {
				InterfaceTemplateInstantiation interfaceTemplateInstantiation = (InterfaceTemplateInstantiation)theEObject;
				T result = caseInterfaceTemplateInstantiation(interfaceTemplateInstantiation);
				if (result == null) result = caseTemplateInstantiation(interfaceTemplateInstantiation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.PORT: {
				Port port = (Port)theEObject;
				T result = casePort(port);
				if (result == null) result = caseNamedElement(port);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.INTEGER_VALUE: {
				IntegerValue integerValue = (IntegerValue)theEObject;
				T result = caseIntegerValue(integerValue);
				if (result == null) result = caseValue(integerValue);
				if (result == null) result = caseIntTemplateArgument(integerValue);
				if (result == null) result = caseTemplate(integerValue);
				if (result == null) result = caseNamedElement(integerValue);
				if (result == null) result = caseTemplateArgument(integerValue);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.INT_TEMPLATE_ARGUMENT: {
				IntTemplateArgument intTemplateArgument = (IntTemplateArgument)theEObject;
				T result = caseIntTemplateArgument(intTemplateArgument);
				if (result == null) result = caseTemplateArgument(intTemplateArgument);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.INT_TEMPLATE_INSTANTIATION: {
				IntTemplateInstantiation intTemplateInstantiation = (IntTemplateInstantiation)theEObject;
				T result = caseIntTemplateInstantiation(intTemplateInstantiation);
				if (result == null) result = caseNonTypeTemplateInstantiation(intTemplateInstantiation);
				if (result == null) result = caseCppTemplateInstantiation(intTemplateInstantiation);
				if (result == null) result = caseTemplateInstantiation(intTemplateInstantiation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.INT_TEMPLATE_PARAMETER: {
				IntTemplateParameter intTemplateParameter = (IntTemplateParameter)theEObject;
				T result = caseIntTemplateParameter(intTemplateParameter);
				if (result == null) result = caseNonTypeTemplateParameter(intTemplateParameter);
				if (result == null) result = caseIntTemplateArgument(intTemplateParameter);
				if (result == null) result = caseCppTemplateParameter(intTemplateParameter);
				if (result == null) result = caseTemplateParameter(intTemplateParameter);
				if (result == null) result = caseNamedElement(intTemplateParameter);
				if (result == null) result = caseTemplateArgument(intTemplateParameter);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.NAMED_ELEMENT: {
				NamedElement namedElement = (NamedElement)theEObject;
				T result = caseNamedElement(namedElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.MODULE: {
				Module module = (Module)theEObject;
				T result = caseModule(module);
				if (result == null) result = caseNamedElement(module);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.NON_TYPE_TEMPLATE_INSTANTIATION: {
				NonTypeTemplateInstantiation nonTypeTemplateInstantiation = (NonTypeTemplateInstantiation)theEObject;
				T result = caseNonTypeTemplateInstantiation(nonTypeTemplateInstantiation);
				if (result == null) result = caseCppTemplateInstantiation(nonTypeTemplateInstantiation);
				if (result == null) result = caseTemplateInstantiation(nonTypeTemplateInstantiation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.NON_TYPE_TEMPLATE_PARAMETER: {
				NonTypeTemplateParameter nonTypeTemplateParameter = (NonTypeTemplateParameter)theEObject;
				T result = caseNonTypeTemplateParameter(nonTypeTemplateParameter);
				if (result == null) result = caseCppTemplateParameter(nonTypeTemplateParameter);
				if (result == null) result = caseTemplateParameter(nonTypeTemplateParameter);
				if (result == null) result = caseNamedElement(nonTypeTemplateParameter);
				if (result == null) result = caseTemplateArgument(nonTypeTemplateParameter);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.OPERATION: {
				Operation operation = (Operation)theEObject;
				T result = caseOperation(operation);
				if (result == null) result = caseTypedElement(operation);
				if (result == null) result = caseNamedElement(operation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.OPERATION_PARAMETER: {
				OperationParameter operationParameter = (OperationParameter)theEObject;
				T result = caseOperationParameter(operationParameter);
				if (result == null) result = caseTypedElement(operationParameter);
				if (result == null) result = caseNamedElement(operationParameter);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.PACKAGE: {
				com.unwiredgrain.modeling.sscm.Package package_ = (com.unwiredgrain.modeling.sscm.Package)theEObject;
				T result = casePackage(package_);
				if (result == null) result = caseNamedElement(package_);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.PROTOCOL: {
				Protocol protocol = (Protocol)theEObject;
				T result = caseProtocol(protocol);
				if (result == null) result = caseTemplate(protocol);
				if (result == null) result = caseNamedElement(protocol);
				if (result == null) result = caseTemplateArgument(protocol);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.PROTOCOL_TEMPLATE_INSTANTIATION: {
				ProtocolTemplateInstantiation protocolTemplateInstantiation = (ProtocolTemplateInstantiation)theEObject;
				T result = caseProtocolTemplateInstantiation(protocolTemplateInstantiation);
				if (result == null) result = caseTemplateInstantiation(protocolTemplateInstantiation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TEMPLATE: {
				Template template = (Template)theEObject;
				T result = caseTemplate(template);
				if (result == null) result = caseNamedElement(template);
				if (result == null) result = caseTemplateArgument(template);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TEMPLATE_ARGUMENT: {
				TemplateArgument templateArgument = (TemplateArgument)theEObject;
				T result = caseTemplateArgument(templateArgument);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TEMPLATE_INSTANTIATION: {
				TemplateInstantiation templateInstantiation = (TemplateInstantiation)theEObject;
				T result = caseTemplateInstantiation(templateInstantiation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TEMPLATE_PARAMETER: {
				TemplateParameter templateParameter = (TemplateParameter)theEObject;
				T result = caseTemplateParameter(templateParameter);
				if (result == null) result = caseNamedElement(templateParameter);
				if (result == null) result = caseTemplateArgument(templateParameter);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TYPED_ELEMENT: {
				TypedElement typedElement = (TypedElement)theEObject;
				T result = caseTypedElement(typedElement);
				if (result == null) result = caseNamedElement(typedElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TYPE_TEMPLATE_ARGUMENT: {
				TypeTemplateArgument typeTemplateArgument = (TypeTemplateArgument)theEObject;
				T result = caseTypeTemplateArgument(typeTemplateArgument);
				if (result == null) result = caseTemplateArgument(typeTemplateArgument);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TYPE_TEMPLATE_INSTANTIATION: {
				TypeTemplateInstantiation typeTemplateInstantiation = (TypeTemplateInstantiation)theEObject;
				T result = caseTypeTemplateInstantiation(typeTemplateInstantiation);
				if (result == null) result = caseCppTemplateInstantiation(typeTemplateInstantiation);
				if (result == null) result = caseTemplateInstantiation(typeTemplateInstantiation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.TYPE_TEMPLATE_PARAMETER: {
				TypeTemplateParameter typeTemplateParameter = (TypeTemplateParameter)theEObject;
				T result = caseTypeTemplateParameter(typeTemplateParameter);
				if (result == null) result = caseCppTemplateParameter(typeTemplateParameter);
				if (result == null) result = caseTypeTemplateArgument(typeTemplateParameter);
				if (result == null) result = caseTemplateParameter(typeTemplateParameter);
				if (result == null) result = caseNamedElement(typeTemplateParameter);
				if (result == null) result = caseTemplateArgument(typeTemplateParameter);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.VALUE: {
				Value value = (Value)theEObject;
				T result = caseValue(value);
				if (result == null) result = caseTemplate(value);
				if (result == null) result = caseNamedElement(value);
				if (result == null) result = caseTemplateArgument(value);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.BINDING: {
				Binding binding = (Binding)theEObject;
				T result = caseBinding(binding);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.WIRE: {
				Wire wire = (Wire)theEObject;
				T result = caseWire(wire);
				if (result == null) result = caseBinding(wire);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.EXPORT: {
				Export export = (Export)theEObject;
				T result = caseExport(export);
				if (result == null) result = caseBinding(export);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.INNER_CONNECTOR: {
				InnerConnector innerConnector = (InnerConnector)theEObject;
				T result = caseInnerConnector(innerConnector);
				if (result == null) result = caseConnector(innerConnector);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case SSCMPackage.OUTER_CONNECTOR: {
				OuterConnector outerConnector = (OuterConnector)theEObject;
				T result = caseOuterConnector(outerConnector);
				if (result == null) result = caseConnector(outerConnector);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			default: return defaultCase(theEObject);
		}
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Basic Module</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Basic Module</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseBasicModule(BasicModule object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Classifier</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Classifier</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseClassifier(Classifier object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Socket</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Socket</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseSocket(Socket object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Composite Module</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Composite Module</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCompositeModule(CompositeModule object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Connector</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Connector</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConnector(Connector object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Cpp Template Instantiation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Cpp Template Instantiation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCppTemplateInstantiation(CppTemplateInstantiation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Cpp Template Parameter</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Cpp Template Parameter</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCppTemplateParameter(CppTemplateParameter object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Interface</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Interface</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInterface(Interface object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Interface Template Instantiation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Interface Template Instantiation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInterfaceTemplateInstantiation(InterfaceTemplateInstantiation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Port</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Port</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T casePort(Port object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Integer Value</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Integer Value</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseIntegerValue(IntegerValue object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Int Template Argument</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Int Template Argument</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseIntTemplateArgument(IntTemplateArgument object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Int Template Instantiation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Int Template Instantiation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseIntTemplateInstantiation(IntTemplateInstantiation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Int Template Parameter</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Int Template Parameter</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseIntTemplateParameter(IntTemplateParameter object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Named Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Named Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseNamedElement(NamedElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Module</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Module</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseModule(Module object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Non Type Template Instantiation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Non Type Template Instantiation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseNonTypeTemplateInstantiation(NonTypeTemplateInstantiation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Non Type Template Parameter</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Non Type Template Parameter</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseNonTypeTemplateParameter(NonTypeTemplateParameter object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Operation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Operation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseOperation(Operation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Operation Parameter</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Operation Parameter</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseOperationParameter(OperationParameter object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Package</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Package</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T casePackage(com.unwiredgrain.modeling.sscm.Package object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Protocol</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Protocol</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseProtocol(Protocol object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Protocol Template Instantiation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Protocol Template Instantiation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseProtocolTemplateInstantiation(ProtocolTemplateInstantiation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Template</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Template</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTemplate(Template object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Template Argument</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Template Argument</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTemplateArgument(TemplateArgument object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Template Instantiation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Template Instantiation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTemplateInstantiation(TemplateInstantiation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Template Parameter</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Template Parameter</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTemplateParameter(TemplateParameter object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Typed Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Typed Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTypedElement(TypedElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Type Template Argument</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Type Template Argument</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTypeTemplateArgument(TypeTemplateArgument object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Type Template Instantiation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Type Template Instantiation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTypeTemplateInstantiation(TypeTemplateInstantiation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Type Template Parameter</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Type Template Parameter</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseTypeTemplateParameter(TypeTemplateParameter object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Value</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Value</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseValue(Value object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Binding</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Binding</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseBinding(Binding object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Wire</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Wire</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseWire(Wire object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Export</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Export</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseExport(Export object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Inner Connector</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Inner Connector</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInnerConnector(InnerConnector object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Outer Connector</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Outer Connector</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseOuterConnector(OuterConnector object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch, but this is the last case anyway.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
	 * @generated
	 */
	public T defaultCase(EObject object) {
		return null;
	}

} //SSCMSwitch
